import java.util.ArrayList;
import java.util.List;

public class B3 {
    // 定义状态枚举
    enum State {
        SCAN, IN_STRING, ESCAPE
    }

    // 提取字符串的核心方法
    public List<String> extractStrings(String source) {
        List<String> result = new ArrayList<>();
        StringBuilder currentStr = new StringBuilder();
        State currentState = State.SCAN; // 初始状态为扫描

        for (char c : source.toCharArray()) {
            switch (currentState) {
                case SCAN:
                    if (c == '"') {
                        currentState = State.IN_STRING; // 进入字符串内
                    }
                    break;
                case IN_STRING:
                    if (c == '"') {
                        result.add(currentStr.toString()); // 保存字符串
                        currentStr.setLength(0); // 重置临时缓存
                        currentState = State.SCAN; // 回到扫描状态
                    } else if (c == '\\') {
                        currentState = State.ESCAPE; // 进入转义状态
                    } else {
                        currentStr.append(c); // 普通字符加入缓存
                    }
                    break;
                case ESCAPE:
                    currentStr.append(c); // 转义字符直接加入缓存
                    currentState = State.IN_STRING; // 回归字符串内
                    break;
            }
        }
        return result;
    }

    // 测试方法
    public static void main(String[] args) {
        String testInput = "\"一般学习一门编程语言的时候，基本上第一个程序是输出\\\"Hello World!\\\"\"";
        B3 extractor = new B3();
        List<String> extracted = extractor.extractStrings(testInput);
        System.out.println("提取结果：" + extracted);
        // 预期输出：[一般学习一门编程语言的时候，基本上第一个程序是输出"Hello World!"]
    }
}